<?php

namespace JLPay\Models\Openmerch\Query;

use JLPay\Models\BaseResponse;

/**
 * 商户费率查询响应
 */
class MerchFeeQueryResponse extends BaseResponse
{
    protected string $merchNo = '';  // 商户号
    protected array $rateInfo = [];  // 费率信息列表

    /**
     * 构造函数
     *
     * @param array|null $responseArray
     */
    public function __construct(?array $responseArray = null)
    {
        parent::__construct($responseArray);
        
        if ($responseArray) {
            $this->merchNo = $responseArray['merch_no'] ?? '';
            
            // 处理费率信息列表
            $rateInfoList = $responseArray['rate_info'] ?? [];
            if ($rateInfoList && is_array($rateInfoList)) {
                foreach ($rateInfoList as $rateData) {
                    if (is_array($rateData)) {
                        $rateInfo = new MerchFeeRateInfoDto();
                        $rateInfo->setFeeCalcType($rateData['fee_calc_type'] ?? '');
                        $rateInfo->setMinAmt($rateData['min_amt'] ?? '');
                        $rateInfo->setMaxAmt($rateData['max_amt'] ?? '');
                        $rateInfo->setFixed($rateData['fixed'] ?? '');
                        $rateInfo->setRate($rateData['rate'] ?? '');
                        $rateInfo->setBottom($rateData['bottom'] ?? '');
                        $rateInfo->setTop($rateData['top'] ?? '');
                        $rateInfo->setStep($rateData['step'] ?? '');
                        $rateInfo->setBaseAmount($rateData['base_amount'] ?? '');
                        $rateInfo->setBaseFee($rateData['base_fee'] ?? '');
                        $this->rateInfo[] = $rateInfo;
                    }
                }
            }
        }
    }

    /**
     * 获取商户号
     *
     * @return string
     */
    public function getMerchNo(): string
    {
        return $this->merchNo;
    }

    /**
     * 获取费率信息列表
     *
     * @return array
     */
    public function getRateInfo(): array
    {
        return $this->rateInfo;
    }

    /**
     * 转换为数组
     *
     * @return array
     */
    public function toArray(): array
    {
        $data = parent::toArray();
        $data['merch_no'] = $this->merchNo;
        
        // 转换费率信息列表
        $rateInfoArray = [];
        foreach ($this->rateInfo as $rateInfo) {
            if ($rateInfo instanceof MerchFeeRateInfoDto) {
                $rateInfoArray[] = $rateInfo->toArray();
            } else {
                // 如果不是MerchFeeRateInfoDto对象，直接使用原数组
                $rateInfoArray[] = is_array($rateInfo) ? $rateInfo : (array)$rateInfo;
            }
        }
        $data['rate_info'] = $rateInfoArray;
        
        return $data;
    }
} 